package com.poetize.plus.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

/**
 *
 * 日期计算工具类
 * @author zuosy
 * @created 2024/4/11 13:51
 */
public class TimeUtil {

    /**
     * 1. 1分钟内：刚刚
     * 2. 60分钟内：x分钟前
     * 3. 24小时内：x小时前
     * 4. 1年内：x月x日
     * 5. 大于1年：年-月-日
     * @param time
     * @return
     */
    public static String compute(LocalDateTime time){
        LocalDateTime now = LocalDateTime.now();
        if (time.isAfter(now)){
            throw new RuntimeException("日期处理异常");
        }
        String result;

        long seconds = differSeconds(time, now);
        if (seconds < 60){
            result = "刚刚";
            return result;
        }

        long minutes = differMinutes(time, now);
        if (minutes < 60){
            result = minutes + "分钟前";
            return result;
        }

        long hours = differHours(time, now);
        if (hours < 24){
            result = hours + "小时前";
            return result;
        }

        long years = differYears(time, now);
        if (years < 1){
            result = time.format(DateTimeFormatter.ofPattern("MM月dd日"));
        }else {
            result = time.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
        }
        return result;
    }

    /**
     * 两个时间相差多少秒
     * @param time1
     * @param time2
     * @return
     */
    public static long differSeconds(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.SECONDS.between(time1, time2);
    }

    /**
     * 两个时间相差多少秒
     * @param time1
     * @param time2
     * @return
     */
    public static long differSeconds(LocalDate time1, LocalDate time2){
        return ChronoUnit.SECONDS.between(time1, time2);
    }

    /**
     * 两个时间相差多少分钟
     * @param time1
     * @param time2
     * @return
     */
    public static long differMinutes(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.MINUTES.between(time1, time2);
    }

    /**
     * 两个时间相差多少分钟
     * @param time1
     * @param time2
     * @return
     */
    public static long differMinutes(LocalDate time1, LocalDate time2){
        return ChronoUnit.MINUTES.between(time1, time2);
    }

    /**
     * 两个时间相差多少小时
     * @param time1
     * @param time2
     * @return
     */
    public static long differHours(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.HOURS.between(time1, time2);
    }

    /**
     * 两个时间相差多少小时
     * @param time1
     * @param time2
     * @return
     */
    public static long differHours(LocalDate time1, LocalDate time2){
        return ChronoUnit.HOURS.between(time1, time2);
    }

    /**
     * 两个时间相差多少天
     * @param time1
     * @param time2
     * @return
     */
    public static long differDays(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.DAYS.between(time1, time2);
    }

    /**
     * 两个时间相差多少天
     * @param time1
     * @param time2
     * @return
     */
    public static long differDays(LocalDate time1, LocalDate time2){
        return ChronoUnit.DAYS.between(time1, time2);
    }

    /**
     * 两个时间相差多少年
     * @param time1
     * @param time2
     * @return
     */
    public static long differYears(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.YEARS.between(time1, time2);
    }

    /**
     * 两个时间相差多少月
     * @param time1
     * @param time2
     * @return
     */
    public static long differMonths(LocalDateTime time1, LocalDateTime time2){
        return ChronoUnit.MONTHS.between(time1, time2);
    }

    /**
     * 两个时间相差多少月
     * @param time1
     * @param time2
     * @return
     */
    public static long differMonths(LocalDate time1, LocalDate time2){
        return ChronoUnit.MONTHS.between(time1, time2);
    }

    /**
     * 两个时间相差多少年
     * @param time1
     * @param time2
     * @return
     */
    public static long differYears(LocalDate time1, LocalDate time2){
        return ChronoUnit.YEARS.between(time1, time2);
    }
}
